/*******************************************
  Jose Andres Lara Vecino

  Author       : $Author: cainlara@gmail.com $
  Last CheckIn : $Date: 2012-08-22 18:35:06 +0000 (Wed, 22 Aug 2012) $
  Revision     : $Revision: 100 $
*******************************************/

package generico;

import java.util.List;

import javax.swing.table.AbstractTableModel;

import core.ETipoTabla;

/**
 * Super clase para el modelo de un componente tabla.
 * 
 * @author jose.lara 06.06.2012
 *
 * @param <T> El tipado de datos que se planea representar.
 */
public abstract class GenericoTablaModelo<T> extends AbstractTableModel {
    private static final long serialVersionUID = 1402299073972253055L;
    
    private List<T> datos           = null;
    private List<String> columnas   = null;
    
    public GenericoTablaModelo(ETipoTabla tipoTabla) {
        this.columnas = tipoTabla.getColumnas();
    }
    
    public List<T> getDatos() {
        return datos;
    }
    
    public void setDatos(List<T> datos) {
        this.datos = datos;
    }
    
    public List<String> getColumnas() {
        return columnas;
    }
    
    public void setColumnas(List<String> columnas) {
        this.columnas = columnas;
    }
    
    @Override
    public int getRowCount() {
        if(this.datos == null) {
            return 0;
        }
        
        return this.datos.size();
    }

    @Override
    public int getColumnCount() {
        if(this.columnas == null) {
            return 0;
        }
        
        return this.columnas.size();
    }

    @Override
    public String getColumnName(int columnIndex) {
        if(this.columnas == null) {
            return null;
        }
        
        return this.columnas.get(columnIndex);
    }

    @Override
    public abstract Object getValueAt(int rowIndex, int columnIndex);
    
    public abstract void actualizarDatos();
}
